package com.library.books.service;

import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.library.books.domain.Books;
import com.library.books.domain.vo.BooksJoinBooksCopyJoinBooksRule;
import com.library.books.domain.vo.BooksJoinBooksCopyJoinBooksRuleJoinBookShelf;
import org.apache.ibatis.annotations.Param;

/**
 * 书籍Service接口
 *
 * @author hb
 * @date 2024-10-14
 */
public interface IBooksService extends IService<Books>
{

    /**
     * 查询书籍列表
     *
     * @param books 书籍
     * @return 书籍集合
     */
    List<Books> selectBooksList(Books books);

    /**
     * 根据RFID查询出书籍信息和规则信息
     *
     * @param rfid rfid编号
     * @return 书籍拼接书籍副本和书籍规则实体类
     */
    List<BooksJoinBooksCopyJoinBooksRule> selectBooksInfoJoinBooksRuleInfoListByRfid(@Param("rfid") List<String> rfid);

    /**
     * 根据索书号查询出书籍信息和规则信息
     *  - 小分类索书号
     *
     * @param license 索书号
     * @return 书籍拼接书籍副本和书籍规则实体类
     */
    BooksJoinBooksCopyJoinBooksRule selectBooksInfoJoinBooksRuleInfoListByLicense(String license);

    /**
     * 软删除
     *
     * @param ids id
     * @return 结果
     */
    boolean softDeletion(@Param("ids") Long[] ids);

    /**
     * 查询书籍回收列表
     *
     * @param books 书籍
     * @return 书籍回收集合
     */
    List<BooksJoinBooksCopyJoinBooksRule> selectBooksRecycleList(Books books);

    /**
     * 恢复书籍
     *
     * @param ids id
     * @return 结果
     */
    boolean recoveryBooks(@Param("ids") Long[] ids);

    /**
     * 一键恢复书籍和书籍副本
     *
     * @param booksId id
     * @return 结果
     */
    boolean oneKeyRecoveryBooksAndBooksCopy(Long[] booksId);

    /**
     * 查询书籍信息
     *  - 书籍信息（必须返回）
     *  - 书籍副本（）
     *  - 书籍规则（）
     *  - 书籍存放书架（）
     * @param join 查询条件
     * @return list
     */
    BooksJoinBooksCopyJoinBooksRuleJoinBookShelf selectBooksInfoJoinBooksRuleJoinBookShelfInfo(BooksJoinBooksCopyJoinBooksRuleJoinBookShelf join);

}
